今天要來介紹一下 Set
set 儲存的是 沒有順序性 且 不重複 的資料(會自動刪除重複的元素)
建立 set:
用 set() 或 {} 來建立,但是 {} 裡面要放東西,不然會被判定為 dict
s = {1, 2, 3}
print(type(s))
x = {}
print(type(x))

s = {1, 2, 3}
print(s)

用 set() 建立
settt = set(('a', 'b', 'c')) #注意這裡是兩層括號
print(settt)
print(type(settt))

set 不能有重複元素
s = {'Red', 'Blue', 'Yellow', 'Red'} # 只能有一個 'Red'
print(s)

想知道 set 內有多少元素:用 len() 來看
s = {'Red', 'Blue', 'Yellow'}
print(len(s))

增加 set 內的元素
set.add():新增元素
s = {'Red', 'Blue', 'Yellow'}
s.add('Orange')
print(s)

set.update():可以把任何可迭代的物件也加到原本的 set 當中
s = {'Red', 'Blue', 'Yellow'}
abcd = {'hello', 'python'}
s.update(abcd) #合併另一個 set
print(s)

s = {'Red', 'Blue', 'Yellow'}
abcd = ['hello', 'python', 123]
s.update(abcd)
print(s)

set.union:把兩個 set 合併到另一個新的 set,跟 update 的差別是建立一個新的 set 或是改變原本的 set
set1 = {1, 2, 3}
set2 = {'a', 'b', 'c'}
set3 = set1.union(set2)
print(set3)
set1.update(set2)
print(set1)

這兩個「update(), union()」的括號內可以放任何可迭代的物件(list, dic, tuple, set)但是前面一定要是 set 才可以用這兩個函式。
減少 set 內的元素
set.remove():刪除元素,若括號內的元素原本的 set 裡沒有會錯誤
s = {'Red', 'Blue', 'Yellow'}
s.remove('Red')
print(s)

set.discard():也是刪除元素,但是括號內的元素 set 沒有也不會錯誤
s = {'Red', 'Blue', 'Yellow'}
s.discard('Red')
print(s)

s = {'Red', 'Blue', 'Yellow'}
s.discard('Orange') #set 內沒有 'Orange' 也不會錯誤
print(s)

set.clear:清空 set
s = {'Red', 'Blue', 'Yellow'}
s.clear()
print(s)
print(type(s))

del:刪除整個 set
s = {'Red', 'Blue', 'Yellow'}
del s
set.pop():與 list 不同,由於 set 沒有順序性,所以是隨機移除一個 set 內的元素
s = {'Red', 'Blue', 'Yellow'}
s.pop()
print(s)


用 loop 把跑一遍 set
s = {'Red', 'Blue', 'Yellow'}
for x in s:
print(x)

檢查特定元素是否在 set 裡
s = {'Red', 'Blue', 'Yellow'}
print('Red' in s)

Set Methods
set.intersection_update():檢查 set 之間交集(共有)的元素,並把引導的 set 改為只剩交集的元素
x = {'Red', 'Blue', 'Yellow'}
y = {'hello', 2, 'Red'} #共有的只有 'Red'
x.intersection_update(y)
print(x)

set.intersection():檢查 set 之間交集(共有)的元素,並建立一個新的 set
x = {'Red', 'Blue', 'Yellow'}
y = {'hello', 2, 'Red'}
x.intersection_update(y)
z = x.intersection(y)
print('set x =', x)
print('set z =', z)

set.symmetric_difference_update() set.symmetric_difference():取出 set 之間交集的元素「之外」的元素
x = {'Red', 'Blue', 'Yellow'}
y = {'hello', 2, 'Red'}
x.symmetric_difference_update(y) #得到的值會蓋過原本的 x
print('set x =', x)

x = {'Red', 'Blue', 'Yellow'}
y = {'hello', 2, 'Red'}
z = x.symmetric_difference(y) #得到的值給 z
print('set z =', z)

set.difference() set.difference_update():找出該 set 與另一個 set 「不一樣」的元素
x = {'Red', 'Blue', 'Yellow'}
y = {'hello', 2, 'Red'}
z = x.difference(y) #不會改變 x
x.difference_update(y) #會改變 x 所以放後面
print('set z =', z)
print('set x =', x)

待續...